home *** CD-ROM | disk | FTP | other *** search
- # include <ingres.h>
- # include <version.h>
- # include <access.h>
- # include <sccs.h>
-
- SCCSID(@(#)checkadmin.c 8.2 1/3/85)
-
- /*
- ** CHECKADMIN -- check admin file version, etc.
- **
- ** The checks for database version code and whatnot are
- ** factored out into this routine. When this routine returns,
- ** the admin file should be legible to this program.
- ** If the admin file is not legible, it will syserr.
- **
- ** Parameters:
- ** fd -- open file descriptor for admin file. Only
- ** read access is required.
- **
- ** Returns:
- ** nothing if ok.
- ** not at all (or via syserr) if not ok.
- **
- ** Side Effects:
- ** The Admin.adhdr struct will be filled in.
- */
-
- checkadmin(fd)
- register int fd;
- {
- register int i;
- register int k;
-
- i = ((char *) &Admin.adhdr.adversion) - ((char *) &Admin.adhdr);
- if (read(fd, (char *) &Admin.adhdr, i) != i)
- syserr("readadmin: admin read err 1");
- if (!bitset(A_NEWFMT, Admin.adhdr.adflags))
- syserr("readadmin: cannot use old databases");
-
- /* read in remainder of admin header */
- i = sizeof Admin.adhdr;
- if (Admin.adhdr.adlength < i)
- i = Admin.adhdr.adlength;
- i -= ((char *) &Admin.adhdr.adversion) - ((char *) &Admin.adhdr);
- if (i <= 0)
- syserr("readadmin: adlen=%d, hdrsz=%d, ct=%d", Admin.adhdr.adlength, sizeof Admin.adhdr, i);
- if ((k = read(fd, (char *) &Admin.adhdr.adversion, i)) != i)
- syserr("readadmin: admin read err 2, i=%d k=%d", i, k);
-
- /* check versions here */
- if (Admin.adhdr.adversion != DBVERCODE)
- syserr("cannot handle code %d databases (current code is %d)",
- Admin.adhdr.adversion, DBVERCODE);
- if (Admin.adhdr.adreldsz != sizeof Admin.adreld)
- syserr("checkadmin: descriptor size mismatch, dec=%d, actual=%d\n Run ingconv on this database.",
- Admin.adhdr.adreldsz, sizeof Admin.adreld);
-
- /* get to beginning of descriptors */
- if (lseek(fd, (long) Admin.adhdr.adlength, 0) < 0)
- syserr("checkadmin: seek");
-
- /* read the descriptors */
- if (read(fd, (char *) &Admin.adreld, Admin.adhdr.adreldsz) != Admin.adhdr.adreldsz)
- syserr("checkadmin: reld read sz=%d", Admin.adhdr.adreldsz);
- if (read(fd, (char *) &Admin.adattd, Admin.adhdr.adattdsz) != Admin.adhdr.adattdsz)
- syserr("checkadmin: attd read sz=%d", Admin.adhdr.adattdsz);
- }
-